// BUMPCHOMRE ---- Created with 3Dmigoto v1.3.16 on Wed Mar 23 17:17:58 2022

cbuffer _Globals : register(b0)
{
  float4x4 g_mViewProj : packoffset(c0);
  float4 g_vCamPos : packoffset(c4);

  struct
  {
    float4 vPlane;
    float4 vSettings;
  } g_ClipPlane : packoffset(c5);

  float4 g_vKSettings : packoffset(c7);
  float4x4 g_mPrevObjViewProj : packoffset(c8);
  float4 g_vDefSettings : packoffset(c12);
  float4 specColor : packoffset(c13);
  float4 ControlData : packoffset(c14);
  float4 difColor : packoffset(c15);
  float4 ambient : packoffset(c16);
  float4 g_vDefLightDir : packoffset(c17);
  float4 g_vDefLightColor : packoffset(c18);
  float4 g_vDefSpecColor : packoffset(c19);
  float4x4 g_mCloudsShadowsSpace : packoffset(c20) = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  float4 g_vCloudsShadowDesc : packoffset(c24) = {0,0,0,0};
  float4 g_vScreenDepthRect : packoffset(c25);
  float4 g_vBumpStrength : packoffset(c26) = {1,0,0,0};
  int4 g_vnStartCascadeInstance : packoffset(c27) = {0,0,0,0};
}

SamplerState AlphaSampler_s : register(s0);
SamplerState DiffuseSampler_s : register(s1);
SamplerState DPattern0Sampler_s : register(s2);
SamplerState DPattern1Sampler_s : register(s3);
SamplerState DPattern2Sampler_s : register(s4);
SamplerState DamageSampler_s : register(s5);
SamplerState NormalSampler_s : register(s6);
Texture2D<float4> DamageSampler : register(t0);
Texture2D<float4> DPattern0Sampler : register(t1);
Texture2D<float4> DPattern2Sampler : register(t2);
Texture2D<float4> DPattern1Sampler : register(t3);
Texture2D<float4> DiffuseSampler : register(t4);
Texture2D<float4> AlphaSampler : register(t5);
Texture2D<float4> NormalSampler : register(t6);


// 3Dmigoto declarations
#define cmp -
Texture1D<float4> IniParams : register(t120);
Texture2D<float4> StereoParams : register(t125);


void main(
  float4 v0 : SV_Position0,
  float4 v1 : TEXCOORD0,
  float4 v2 : TEXCOORD1,
  float4 v3 : TEXCOORD2,
  float4 v4 : TEXCOORD3,
  float4 v5 : TEXCOORD4,
  float4 v6 : TEXCOORD5,
  float4 v7 : TEXCOORD6,
  float4 v8 : TEXCOORD7,
  float4 v9 : TEXCOORD8,
  float v10 : SV_ClipDistance0,
  out float4 o0 : SV_Target0,
  out float4 o1 : SV_Target1,
  out float4 o2 : SV_Target2,
  out float2 o3 : SV_Target3)
{
  float4 r0,r1,r2,r3,r4,r5,r6;
  uint4 bitmask, uiDest;
  float4 fDest;

  r0.x = cmp(v2.z >= 0.25);
  if (r0.x != 0) {
    r0.xyzw = DamageSampler.Sample(DamageSampler_s, v1.xy).xyzw;
    r1.xy = cmp(v2.zz >= float2(0.5,0.75));
    if (r1.x != 0) {
      r0.x = max(r0.x, r0.y);
    }
    if (r1.y != 0) {
      r0.x = max(r0.x, r0.z);
    }
    r0.y = cmp(0.75 < r0.x);
    if (r0.y != 0) {
      r0.z = -1;
    }
    if (r0.y == 0) {
      r1.x = cmp(r0.w < 0.330000013);
      if (r1.x != 0) {
        r1.xyzw = DPattern0Sampler.Sample(DPattern0Sampler_s, v2.xy).wxyz;
        r2.xyz = r1.yzw;
      } else {
        r0.w = cmp(0.660000026 < r0.w);
        if (r0.w != 0) {
          r1.xyzw = DPattern2Sampler.Sample(DPattern2Sampler_s, v2.xy).wxyz;
          r2.xyz = r1.yzw;
        } else {
          r1.xyzw = DPattern1Sampler.Sample(DPattern1Sampler_s, v2.xy).wxyz;
          r2.xyz = r1.yzw;
        }
      }
      r0.w = r0.x + r0.x;
      r0.x = min(1, r0.w);
    } else {
      r2.xyz = float3(0,0,0);
      r1.x = 0;
    }
  } else {
    r2.xyz = float3(0,0,0);
    r1.x = 0;
    r0.xy = float2(0,0);
  }
  if (r0.y == 0) {
    r0.z = r0.x;
  }
  r0.x = cmp(r0.z < -0.5);
  if (r0.x != 0) {
    if (-1 != 0) discard;
  }
  r3.xyzw = DiffuseSampler.Sample(DiffuseSampler_s, v1.xy).xyzw;
  ////////////////////////////////////////////////////////////////////
      r6.x = r3.w; ////// new
  ////////////////////////////////////////////////////////////////////
  r0.x = 0.5;
  r0.y = r3.w;
  r0.xyw = AlphaSampler.Sample(AlphaSampler_s, r0.xy).xyz;
  //o2.x = r0.z;
  r0.w = cmp(r0.w < 0.5);
  if (r0.w != 0) {
    if (-1 != 0) discard;
  }

  r4.xyzw = NormalSampler.Sample(NormalSampler_s, v1.xy).xyzw; /////////////// REMEMBER GRAB FOR SHIT OCCLUSION
  r6.y = 1.0 + -(r4.x + r4.y);
 ////////////// o2.x = 1.0 + -(r4.x + r4.y);
  r1.y = 0.5;
  r1.xy = AlphaSampler.Sample(AlphaSampler_s, r1.yx).xy;
  r4.xyz = r4.xyz * float3(2,2,2) + float3(-1,-1,-1);
  r4.xy = g_vBumpStrength.xx * r4.xy;
  r5.x = dot(v3.xyz, r4.xyz);
  r5.y = dot(v4.xyz, r4.xyz);
  r5.z = dot(v5.xyz, r4.xyz);
  r0.w = dot(r5.xyz, r5.xyz);
  r0.w = rsqrt(r0.w);
  r4.xyz = r5.xyz * r0.www;
  ////////////////////////////////////////////////////////////////////////////////
  o2.x = 2.0 * (r6.x * r6.x);/// + -r6.y;
  o1.xyz = r4.xyz * float3(0.5,0.5,0.5) + float3(0.5,0.5,0.5);
  r2.xyz = r2.xyz * r4.www + -r3.xyz;
  r2.xyz = r0.zzz * r2.xyz + r3.xyz;
  r2.xyz = difColor.xyz * r2.xyz; ////////// FUCK THIS
  o0.xyz = float3(1.70000005,1.70000005,1.70000005) * r2.xyz;
  r1.xy = r1.xy * r4.ww + -r0.xy;

  r0.xy = r0.zz * r1.xy + r0.xy;
  r0.xzw = specColor.xyz * r0.xxx;
  //////////////////////////////////////////////////////////////////

  ///////////////////////////////
  r1.x = dot(r0.xzw, float3(0.333000004,0.333000004,0.333000004));
  r0.x = dot(v7.xyz, v7.xyz);
  r0.x = rsqrt(r0.x);
  r0.xzw = v7.xyz * r0.xxx;
  r0.x = dot(r4.xyz, r0.xzw);
  r0.x = ControlData.z * r0.x;
  r0.x = max(0, r0.x);
  r0.x = 1 + -r0.x;
  r0.z = r0.x * r0.x;
  r0.x = r0.z * r0.x;
  r0.x = ControlData.y * r0.x;
  r1.z = r0.x * r0.y;
  r0.x = cmp(g_vKSettings.x < 0.5);
  if (r0.x != 0) {
    o3.xy = float2(0,0);
  } else {
    r0.x = v3.w;
    r0.y = v4.w;
    r0.z = v5.w;
    r0.w = 1;
    r2.x = dot(r0.xyzw, g_mViewProj._m00_m10_m20_m30);
    r2.y = dot(r0.xyzw, g_mViewProj._m01_m11_m21_m31);
    r1.w = dot(r0.xyzw, g_mViewProj._m03_m13_m23_m33);
    r2.xy = r2.xy / r1.ww;
    r3.x = dot(r0.xyzw, g_mPrevObjViewProj._m00_m10_m20_m30);
    r3.y = dot(r0.xyzw, g_mPrevObjViewProj._m01_m11_m21_m31);
    r0.x = dot(r0.xyzw, g_mPrevObjViewProj._m03_m13_m23_m33);
    r0.xy = r3.xy / r0.xx;
    r0.xy = r2.xy + -r0.xy;
    r0.z = g_vKSettings.y * -r0.y;
    r0.y = dot(r0.xz, r0.xz);
    r0.y = sqrt(r0.y);
    r0.w = cmp(2 < r0.y);
    if (r0.w != 0) {
      r0.y = 2 / r0.y;
      o3.xy = r0.xz * r0.yy;
    } else {
      o3.xy = r0.xz;
    }
  }
  o0.w = 0.0; //// USE USE USE
  o1.w = 0.0;

  r1.y = specColor.w;
//  o2.xyz = r1.xyz;
o2.yz = r1.yz;
o2.x = r6.x;
  o2.w = 0.0;
  return;
}
